﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaLogica.CL.Usuario;

namespace CapaLogica.CL.PeriodoLectivo
{
   public class GestorPeriodoLectivo
    {

        private static PeriodoPersistente persistentePeriodo = new PeriodoPersistente();


        /// <summary>
        /// Método de la clase encargada de abrir un nuevo periodo lectivo.
        /// </summary>
        /// <param name="pFechaInicio">pFechaInicio, tipo DateTime</param>
        /// <param name="pFechaFin">pFechaFin, tipo DateTime</param>
        /// <param name="pUsuario">Usuario que realiza la accion, tipo int</param>
        /// <remarks></remarks>
        public static void abrirPeriodoLectivo(DateTime pFechaInicio, DateTime pFechaFin)
        {
            try
            {
                int idUsuario = Session.Id;
                CL_PeriodoLectivo actual = persistentePeriodo.obtenerPeriodoActual();

                if (actual == null)
                {
                    CL_PeriodoLectivo periodoLectivo = new CL_PeriodoLectivo(pFechaInicio, pFechaFin);
                    persistentePeriodo.insertarPeriodoLectivo(periodoLectivo, idUsuario);
                    
                }
                else
                {
                    throw new Exception("No se puede abrir el Periodo Lectivo porque ya hay otro abierto.");
                }
                
            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }



        /// <summary>
        /// Método de la clase encargada de cerrar un periodo lectivo.
        /// </summary>
        /// <param name="pUsuario">Usuario que realiza la accion, tipo int</param>
        /// <remarks></remarks>
        public static void cerrarPeriodoLectivo()
        {
            try
            {
                int idUsuario = Session.Id;
                CL_PeriodoLectivo actual = persistentePeriodo.obtenerPeriodoActual();
                if (actual != null)
                {
                    persistentePeriodo.cerrarPeriodoLectivo(actual, idUsuario);                 
                }
                else
                {
                    throw new Exception("No se ha podido cerrar el Periodo Lectivo porque no hay ninguno abierto.");
                }
            }
            catch (Exception ex)
            {

                throw  ex;
            }

        }


        public static void validarQuePeriodoLectivoEstaAbierto(string opcion)
        {
            try
            {
                string msj = "";

                switch (opcion )
                {
                    case "ingresar grupo":
                        msj = "No se pueden registrar grupos porque no hay un Periodo Lectivo abierto";
                        break;

                    case "cerrar periodo":
                        msj = "No se puede cerrar porque no hay ningún Periodo Lectivo abierto";
                        break;
                    default:
                        break;
                }

                PeriodoPersistente persistentePeriodo = new PeriodoPersistente();
                CL_PeriodoLectivo periodo = persistentePeriodo.obtenerPeriodoActual();

                if (periodo == null)
                {
                    throw new Exception(msj);
                }
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
            
        }


        public static void validarQuePeriodoLectivoEstaCerrado(string opcion)
        {
            try
            {
                string msj = "";

                switch (opcion)
                {

                    case "cambiar carrera":
                        msj = "No se puede cambiar la carrera de un estudiante cuando el periodo lectivo está abierto";
                        break;
                    case "abrir":
                        msj = "No se puede abrir el periodo lectivo porque ya hay uno abierto.";
                        break;

                    case "eliminar usuario":
                        msj = "No se puede eliminar usuarios cuando el periodo lectivo esta abierto.";
                        break;

                    case "eliminar carrera":
                        msj = "No se puede eliminar una carrera cuando el periodo lectivo esta abierto.";
                        break;
                    case "eliminar curso":
                        msj = "No se puede eliminar un curso cuando el periodo lectivo esta abierto.";
                        break;
                    default:
                        break;
                }

                PeriodoPersistente persistentePeriodo = new PeriodoPersistente();
                CL_PeriodoLectivo periodo = persistentePeriodo.obtenerPeriodoActual();

                if (periodo != null)
                {
                    throw new Exception(msj);
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }


    }
}
